#ifndef _RTC_BOARD_H_
#define _RTC_BOARD_H_

#include <stdint.h>
#include <config.h>
#include <stdbool.h>

#define RTC_TIMER_MAX_VALUE              0xA8C00000

#ifdef CLK_OSC32K
#if (CLK_OSC32K == 1)
#define FREQ_RTC                         32000
#else
#define FREQ_RTC                         32768
#endif
#endif

#define DD                               1

#define CLK_PER_US                       (1.0 / ((1.0 / FREQ_RTC) * 1000 * 1000))
#define CLK_PER_MS                       (CLK_PER_US * 1000)

#define US_PER_CLK                       (1.0 / CLK_PER_US)
#define MS_PER_CLK                       (US_PER_CLK / 1000.0)

#define RTC_TO_US(clk)                   ((uint32_t)((clk) * US_PER_CLK + 0.5))
#define RTC_TO_MS(clk)                   ((uint32_t)((clk) * MS_PER_CLK + 0.5))

#define US_TO_RTC(us)                    ((uint32_t)((us) * CLK_PER_US + 0.5))
#define MS_TO_RTC(ms)                    ((uint32_t)((ms) * CLK_PER_MS + 0.5))

/**
 * @brief 内部32k校准
 *
 */
extern void LibraryCalibrationLSI(void);

/**
 * @brief 获取中断触发标志
 * 
 * @return bool - 触发状态（true：触发 false：恢复）
 */
extern bool RtcGetIrqnTiggerEn(void);

/**
 * @brief 配置RTC触发时间
 * 
 * @param time - 触发时间
 */
extern void RtcSetTiggerTime(uint32_t Time);

/**
 * @brief 实时时钟硬件初始化
 *
 */
extern void RtcHardwareInitialization(void);

#endif
